home *** CD-ROM | disk | FTP | other *** search
/ Mission 3 / Mission 3.zip / Mission 3.iso / zugabe / va45 / visual45 / gwva_sys.mac < prev    next >
Text File  |  1998-08-22  |  12KB  |  557 lines

  1. *-----------------------------------------------------------------------*
  2. *        Macros Custom Visual Assembleur        *
  3. *-----------------------------------------------------------------------*
  4.  
  5.     ;--------- MACROS DE BASE ----------
  6.  
  7. save:    macro    ; save.w d0-d1
  8.     ifc '\0','W'
  9.      fail ; macro 'save' : l'extension en minuscule
  10.      exitm
  11.     endc
  12.     ifc '\0','L'
  13.      fail ; macro 'save' : l'extension en minuscule
  14.      exitm
  15.     endc
  16.     ifeq \?1-2
  17.     move.\0 \1,-(sp)
  18.     else
  19.     movem.\0 \1,-(sp)
  20.     endc
  21.     endm
  22.  
  23. load:    macro    ; load.w d0-d1
  24.     ifc '\0','W'
  25.      fail ; macro 'load' : l'extension en minuscule
  26.      exitm
  27.     endc
  28.     ifc '\0','L'
  29.      fail ; macro 'load' : l'extension en minuscule
  30.      exitm
  31.     endc
  32.     ifeq \?1-2
  33.     move.\0 (sp)+,\1
  34.     else
  35.     movem.\0 (sp)+,\1
  36.     endc
  37.     endm
  38.  
  39. appel:    macro trap,numéro,actualisation    ; appel dos,2,4
  40.     move.w #\2,-(sp)
  41.     trap #\1
  42.     ifle \3-8
  43.     addq.w #\3,sp    ; on peut faire l'addition sur un .w car
  44.     else
  45.     add.w #\3,sp    ; c'est automatiquement étendu
  46.     endc
  47.     endm
  48.  
  49.     ;--------- MACROS CHAINES DE CARACTERES ----------
  50.  
  51. COPY_STRING:    macro source,dest    ; d0.b end char    COPY_STRING a0,a1
  52. .\@ccp:        move.b (\1)+,(\2)+
  53.         cmp.b -1(\1),d0
  54.         bne.s .\@ccp
  55.         endm
  56.  
  57. COPY_STRING_0:    macro source,dest    ; COPY_STRING_0 a0,a1
  58. .\@ccp:        move.b (\1)+,(\2)+
  59.         bne.s .\@ccp
  60.         endm
  61.  
  62. STOP_ON_0        macro source    ; STOP_ON_0 a0     en sortie (source) pointe sur le 0
  63. .\@sch:        tst.b (\1)+
  64.         bne.s .\@sch
  65.         lea -1(\1),\1
  66.         endm
  67.  
  68.     ;--------- MACROS DE SYNCHRONISATION SYSTEME ----------
  69.  
  70. SYNCHRO_GEM:    macro
  71. \@wait_nul:        appel dos,c_conis,2    ; teste du buffer ...
  72.         tst.w d0
  73.         beq.s \@the_end    ; pas de touche en buffer ?
  74.         CRAWCIN
  75.         bra.s \@wait_nul
  76. \@the_end:        VSYNC
  77.         endm
  78.  
  79.     ;--------- MACROS EVOLUEES LIEES A LA SOURIS ----------
  80.  
  81. MOUSEOFF:        macro
  82.         pea GWVA_APP_OBJ_MACRO_MOUSE_INHIBE
  83.         move.w #1-1,-(sp)
  84.         appel xbios,ikbdws,8
  85.         DATA
  86.         ifnd GWVA_APP_OBJ_MACRO_MOUSE_INHIBE
  87. GWVA_APP_OBJ_MACRO_MOUSE_INHIBE:    dc.b $12
  88.         endc
  89.         even
  90.         TEXT
  91.         endm
  92.  
  93. MOUSEON:        macro
  94.         pea GWVA_APP_OBJ_MACRO_MOUSE_DEFAULT
  95.         move.w #2-1,-(sp)
  96.         appel xbios,ikbdws,8
  97.         DATA
  98.         ifnd GWVA_APP_OBJ_MACRO_MOUSE_DEFAULT
  99. GWVA_APP_OBJ_MACRO_MOUSE_DEFAULT:    dc.b $80,$01
  100.         endc
  101.         TEXT
  102.         endm
  103.  
  104.     ;--------- MACROS EVOLUEES LIEES A L'ECRAN ----------
  105.  
  106. RESOLUT:        macro video_mode_falcon,video_mode_compatible,physique,logique    ; video_mode_compatible=0 : ST / video_mode_compatible=3:FALC
  107.         ; RESOLUT #$120,#3,#screen1,#screen2
  108.         move.w \1,-(sp)
  109.         move.w \2,-(sp)
  110.         move.l \3,-(sp)
  111.         move.l \4,-(sp)
  112.         appel xbios,vsetscreen,14
  113.         VSYNC
  114.         endm
  115.  
  116. RESERVE_SCREENS:    macro nb_ecrans,resolut        ; RESERVE_SCREENS 3,res64048016
  117. ; + les constantes : x_max_p,y_max_p,nb_bits_per_pix
  118.  
  119.         move.l #screens,d0
  120.         and.l #$ffffff00,d0
  121.         add.l #$100,d0
  122.         move.l d0,a0
  123.         lea ecrans,a1
  124.  
  125.         move #\1-1,d0
  126. .raz_screens:    move.l a0,(a1)+
  127.         move.l #x_max_p*y_max_p*nb_bits_per_pix/8/4,d1
  128. .raz_screen:    clr.l (a0)+
  129.         subq.l #1,d1
  130.         bne.s .raz_screen
  131.         dbf d0,.raz_screens
  132.  
  133.         move.l ecran,save_ad_ecr
  134.         RESOLUT #-1
  135.         and #$1ff,d0
  136.         move d0,save_mode
  137.  
  138.         move #\2,d1
  139.         btst #5,d0
  140.         bne.s .pal_modus
  141.         bclr #5,d1
  142.  
  143. .pal_modus:        btst #4,d0        ; tv
  144.         bne.s .vga_modus
  145.         bclr #4,d1        ; tv
  146.         bchg #8,d1        ; vertical mode
  147. .vga_modus:
  148.         ifne (\2-res32020016)
  149.         RESOLUT d1,#3,ecrans,ecrans
  150.         else
  151.         RESOLUT d1,#0,ecrans,ecrans
  152.         endc
  153.  
  154.  BSS
  155. save_mode:        ds.w 1
  156. save_ad_ecr:    ds.l 1
  157. ecrans:        ds.l \1
  158. screens:        ds.l \1*x_max_p*y_max_p*nb_bits_per_pix/8/4
  159.         ds.b 256
  160.  TEXT
  161.         endm
  162.  
  163. CHANGE_RESOLUT:    macro resolut    ; CAHNGE_RESOLUT res64048016
  164.         move.l ecrans,a0
  165.         move.l #x_max_p*y_max_p*nb_bits_per_pix/8/4,d1
  166. .raz_screen:    clr.l (a0)+
  167.         subq.l #1,d1
  168.         bne.s .raz_screen
  169.  
  170.         move.l ecran,save_ad_ecr
  171.         RESOLUT #-1
  172.         and #$1ff,d0
  173.         move d0,save_mode
  174.  
  175.         move #\1,d1
  176.         btst #5,d0
  177.         bne.s .pal_modus
  178.         bclr #5,d1
  179.  
  180. .pal_modus:        btst #4,d0        ; tv
  181.         bne.s .vga_modus
  182.         bclr #4,d1        ; tv
  183.         bchg #8,d1        ; vertical mode
  184. .vga_modus:
  185.         ifne (\1-res32020016)
  186.         RESOLUT d1,#3,ecrans,ecrans
  187.         else
  188.         RESOLUT d1,#0,ecrans,ecrans
  189.         endc
  190.  
  191.         endm
  192.  
  193. RESTORE_SCREENS:    macro
  194.         RESOLUT save_mode,#3,save_ad_ecr,save_ad_ecr
  195.         endm
  196.  
  197. COLOR256:        macro color_0    ; COLOR256 #$FF00FF00
  198.         ifnd FLG_INHIBE_COLOR
  199.         move.l \1,palette256
  200.         endc
  201.         endm
  202.  
  203. COLOR:        macro color_0    ; COLOR #$0777
  204.         ifnd FLG_INHIBE_COLOR
  205.         move.w \1,palette
  206.         endc
  207.         endm
  208.  
  209.     ;--------- MACROS LIEES AU ZILOG (PORT SERIE)----------
  210.  
  211. ZILOGR:        macro registre,byte,canal
  212.         ifc 'A','\3'
  213.         move.b \1,zilog8530A
  214.         move.b zilog8530A,\2
  215.         else
  216.         move.b \1,zilog8530B
  217.         move.b zilog8530B,\2
  218.         endc
  219.         endm
  220.  
  221. ZILOGW:        macro registre,byte,canal
  222.         ifc 'A','\3'
  223.         move.b \1,zilog8530A
  224.         move.b \2,zilog8530A
  225.         else
  226.         move.b \1,zilog8530B
  227.         move.b \2,zilog8530B
  228.         endc
  229.         endm
  230.  
  231.  
  232. *-----------------------------------------------------------------------------*
  233. ;        MACROS SYSTEME
  234.  
  235. CRAWCIN:        macro
  236.         appel dos,c_rawcin,2
  237.         endm
  238.  
  239. CCONWS:        macro string    ; lea ma_string,a0    CCONWS (a0)
  240.         pea \1
  241.         appel dos,c_conws,6
  242.         endm
  243.  
  244. SUPEXEC:        macro ptr_routine    ; lea ma_routine,a0    SUPEXEC (a0)
  245.         pea \1
  246.         appel xbios,supexec,6
  247.         endm
  248.  
  249. VSYNC:        macro
  250.         appel xbios,vsync,2
  251.         endm
  252.  
  253. VSETMODE:        macro mode        ; VSETMODE #0
  254.         move.w \1,-(sp)
  255.         appel xbios,vsetmode,4
  256.         endm
  257.  
  258. FATTRIB:        macro attr,flag,fname    ; FATTRIB #%1,#1,mon_fichier
  259.         move.w \1,-(sp)
  260.         move.w \2,-(sp)
  261.         pea \3
  262.         appel dos,f_attrib,10
  263.         endm
  264.  
  265. FDELETE:        macro fname        ; FDELETE mon_fichier
  266.         pea \1
  267.         appel dos,f_delete,6
  268.         endm
  269.  
  270. FREAD:        macro buf,length,handle    ; FREAD #mon_buffer,d0,d7
  271.         move.l \1,-(sp)
  272.         move.l \2,-(sp)
  273.         move.w \3,-(sp)
  274.         appel dos,f_read,12
  275.         endm
  276.  
  277. FWRITE:        macro buf,count,handle    ; FWRITE #mon_buffer,d0,d7
  278.         move.l \1,-(sp)
  279.         move.l \2,-(sp)
  280.         move.w \3,-(sp)
  281.         appel dos,f_write,12
  282.         endm
  283.  
  284. FSEEK:        macro mode,handle,offset    ; FSEEK #0,d7,d0
  285.         ; mode = begining (0), current (1) end (2)
  286.         move.w \1,-(sp)
  287.         move.w \2,-(sp)
  288.         move.l \3,-(sp)
  289.         appel dos,f_seek,10
  290.         endm
  291.  
  292. FCLOSE:        macro handle    ; FCLOSE d7
  293.         move.w \1,-(sp)
  294.         appel dos,f_close,4
  295.         endm
  296.  
  297. FSFIRST:        macro attribs,fspec    ; FSFIRST #%11,ma_recherche
  298.         move.w \1,-(sp)
  299.         pea \2
  300.         appel dos,f_sfirst,8
  301.         endm
  302.  
  303. FSNEXT:        macro
  304.         appel dos,f_snext,2
  305.         endm
  306.  
  307. DCREATE:        macro path        ; DCREATE mon_dossier
  308.         pea \1
  309.         appel dos,d_create,6
  310.         endm
  311.  
  312. DFREE:        macro buf,drive    ; DFREE #'C'-'A',mon_buffer
  313.         move.w \2,-(sp)
  314.         pea \1
  315.         appel dos,d_free,8
  316.         endm
  317.  
  318. DGETDRV:        macro
  319.         appel dos,d_getdrv,2
  320.         endm
  321.  
  322. DSETDRV:        macro drive        ; DSETDRV #'C'-'A'
  323.         move \1,-(sp)
  324.         appel dos,d_setdrv,4
  325.         endm
  326.  
  327. DGETPATH:        macro drive,buf    ; DGETPATH #'C'-'A',mon_buffer
  328.         move.w \1,-(sp)
  329.         pea \2
  330.         appel dos,d_getpath,8
  331.         endm
  332.  
  333. DSETPATH:        macro path        ; DSETPATH mon_path
  334.         pea \1
  335.         appel dos,d_setpath,6
  336.         endm
  337.  
  338. FSETDTA:        macro ndta        ; FSETDTA mon_dta
  339.         pea \1
  340.         appel dos,f_setdta,6
  341.         endm
  342.  
  343. FGETDTA:        macro
  344.         appel dos,f_getdta,2
  345.         endm
  346.  
  347. MALLOC:        macro amount    ; MALLOC #ma_taille
  348.         move.l \1,-(sp)
  349.         appel dos,m_alloc,6
  350.         endm
  351.  
  352. MXALLOC:        macro mode,amount (RAM_ST, RAM_TT, RAM_ST_TT, RAM_TT_ST)    ; MXALLOC #RAM_TT_ST,#ma_taille
  353.         move.w \1,-(sp)
  354.         move.l \2,-(sp)
  355.         appel dos,m_xalloc,8
  356.         endm
  357.  
  358. MFREE:        macro startadr    ; MFREE #ma_memoire
  359.         move.l \1,-(sp)
  360.         appel dos,m_free,6
  361.         endm
  362.  
  363. PEXEC:        macro env,cmd,prog,mode    ; PEXEC (a0),ma_commande,mon_prg,#0
  364.         pea \1
  365.         pea \2
  366.         pea \3
  367.         move.w \4,-(sp)
  368.         appel dos,p_exec,16
  369.         endm
  370.  
  371. *-----------------------------------------------------------------------------*
  372. ;        MACROS SEMI-SYSTEME
  373.  
  374. SUPER:        macro mode        ; 0=go super ; 1=get current mode
  375.         move.l #\1,-(sp)
  376.         appel dos,$20,6
  377.         ifne \1-1
  378.         move.l d0,GWVA_OLD_SUPERVISOR_STACK
  379.         endc
  380.         endm
  381.  
  382. USER:        macro
  383.         move.l GWVA_OLD_SUPERVISOR_STACK,-(sp)
  384.         appel dos,$20,6
  385.         endm
  386.  
  387. FILE_OPEN:        macro        ; \1=read/write \2=name \3=destination pour le handle
  388.         ifeq \1-1        ; 0=lecture,other=write
  389.         clr.w -(sp)
  390.         pea \2
  391.         appel dos,$3c,8    ; file create
  392.         move d0,\3
  393.         endc
  394.         ifeq \1
  395.         clr.w -(sp)
  396.         pea \2
  397.         appel dos,$3d,8    ; file open
  398.         move d0,\3
  399.         endc
  400.         ifeq \1-2
  401.         move.w #2,-(sp)
  402.         pea \2
  403.         appel dos,$3d,8
  404.         move d0,\3
  405.         endc
  406.         endm
  407.  
  408. *-----------------------------------------------------------------------------*
  409. ;        MACROS POUR LES OBJETS V.A.
  410.  
  411. GWVA_PROGRAMMER_ERROR:    macro pointeur_chaine
  412.     ifd OPT_GWVA_DEBUG_ERROR
  413.         lea \1,a6
  414.         illegal
  415.     endc ; ifd OPT_GWVA_DEBUG_ERROR
  416.         endm
  417.  
  418. GWVA_CHECK_OBJ_HANDLE:    macro
  419.     ifd OPT_GWVA_DEBUG_ERROR
  420.         cmp.w #GWVA_OBJ_CTE_HANDLE_UNDEF,GWVA_OBJ_HANDLE(a0)
  421.         bne.s .deja_cree
  422.         GWVA_PROGRAMMER_ERROR GWVA_ASCII_ERROR_OBJ_HANDLE
  423. .deja_cree:
  424.     endc ; ifd OPT_GWVA_DEBUG_ERROR
  425.         endm
  426.  
  427. _GWVA_CALL_METHOD:    macro methode,activation
  428.         move.l \1,d4
  429.         move.w \2,d5
  430. *        bsr GWVA_ROOT_PRG_SEARCH_EXEC_METHOD
  431.         endm
  432.  
  433. _GWVA_CALL_METHODNTEST:    macro methode,activation    ; pour méthodes devant
  434.         GWVA_CALL_METHOD \1,\2        ; renvoyer CONSUMED
  435.         cmp.w #GWVA_SEARCH_EXEC_CONSUMED,d6
  436.         beq.s .\@no_error
  437.         cmp.w #GWVA_SEARCH_EXEC_NO_DEST_FOUND,d6
  438.         beq.s .\@no_error
  439.         GWVA_PROGRAMMER_ERROR GWVA_ASCII_ERROR_METHOD_CONSUMED
  440. .\@no_error:
  441.         endm
  442.  
  443. _GWVA_CALL_METHOD2:    macro methode,activation
  444.         move.l \1,d4
  445.         move.w \2,d5
  446. *        bsr GWVA_ROOT_PRG_SEARCH_EXEC_METHOD
  447.         endm
  448.  
  449. _GWVA_CALL_METHODNTEST2:    macro methode,activation    ; pour méthodes devant
  450.         GWVA_CALL_METHOD \1,\2        ; renvoyer CONSUMED
  451.         cmp.w #GWVA_SEARCH_EXEC_CONSUMED,d6
  452.         beq.s .\@no_error
  453.         cmp.w #GWVA_SEARCH_EXEC_NO_DEST_FOUND,d6
  454.         beq.s .\@no_error
  455.         GWVA_PROGRAMMER_ERROR GWVA_ASCII_ERROR_METHOD_CONSUMED
  456. .\@no_error:
  457.         endm
  458.  
  459. *-----------------------------------------------------------------------------*
  460.  
  461. ; Sauvegarde du contexte en ajoutant .SAVE a la fin  des macro
  462. ; GWVA_CALL_METHODxx.SAVE
  463.  
  464.             *---------------*
  465.  
  466. GWVA_CALL_METHOD4:    macro    activation,methode
  467.     move.w \1,d5
  468.     IFNC '\2',''
  469.     move.l \2,d4
  470.     ENDC
  471.     bsr GWVA_ROOT_PRG_SEARCH_AND_EXEC_METHOD
  472.         endm
  473.  
  474.             *---------------*
  475.  
  476.     ; Appel de méthode d'un objet autre que l'objet courant (class MAX forcément)
  477.  
  478. GWVA_CALL_METHOD_OTHER_OBJ:    macro    methode
  479.  
  480.     ifne \#-1
  481.      fail    ; macro GWVA_CALL_METHOD_OTHER_OBJ ne prend qu'un paramètre : la méthode
  482.      exitm
  483.     endc
  484.     ifc '\0','SAVE'
  485.      save.l d3/a3-a6
  486.     endc
  487.  
  488.     GWVA_CALL_METHOD4    #GWVA_MODE_CLASS_METHOD_SEARCH_OTHER_OBJ,\1
  489.  
  490.     ifc '\0','SAVE'
  491.      load.l d3/a3-a6
  492.     endc
  493.             endm
  494.  
  495.             *---------------*
  496.  
  497. ; Appel d'une méthode différente de la même classe (cherche à partir de i)
  498.  
  499. GWVA_CALL_METHOD_DIFF_METH_SAME_CLASS:macro    methode
  500.  
  501.     ifne \#-1
  502.      fail    ; macro GWVA_CALL_METHOD_DIFF_METH_SAME_CLASS ne prend qu'un paramètre : la méthode
  503.      exitm
  504.     endc
  505.     ifc '\0','SAVE'
  506.      save.l d3/a3-a6
  507.     endc
  508.  
  509.     GWVA_CALL_METHOD4    #GWVA_MODE_CLASS_METHOD_SEARCH_DIFF_METH_SAME_CLASS,\1
  510.  
  511.     ifc '\0','SAVE'
  512.      load.l d3/a3-a6
  513.     endc
  514.             endm
  515.  
  516.             *---------------*
  517.  
  518. ; Appel de la même méthode que courante mais classe i-1 (classe dont on hérite)
  519.  
  520. GWVA_CALL_METHOD_INHERITED:    macro    ; pas de paramètre
  521.  
  522.     ifne \#
  523.      fail    ; macro GWVA_CALL_METHOD_INHERITED ne prend aucun paramètre
  524.      exitm
  525.     endc
  526.     ifc '\0','SAVE'
  527.      save.l d3/a3-a6
  528.     endc
  529.  
  530.     GWVA_CALL_METHOD4    #GWVA_MODE_CLASS_METHOD_SEARCH_INHERITED
  531.  
  532.     ifc '\0','SAVE'
  533.      load.l d3/a3-a6
  534.     endc
  535.             endm
  536.  
  537.             *---------------*
  538.  
  539. ; Création d'un évènement : recherche d'une routine à activer dans la liste locale
  540.  
  541. GWVA_EXEC_VISUAL_EVENT:    macro    methode
  542.  
  543.     ifne \#-1
  544.      fail    ; macro GWVA_EXEC_VISUAL_EVENT ne prend qu'un paramètre : la méthode
  545.      exitm
  546.     endc
  547.     ifc '\0','SAVE'
  548.      save.l d3/a3-a6
  549.     endc
  550.  
  551.     GWVA_CALL_METHOD4    #GWVA_MODE_CLASS_METHOD_SEARCH_VISUAL_EVENT,\1
  552.  
  553.     ifc '\0','SAVE'
  554.      load.l d3/a3-a6
  555.     endc
  556.             endm
  557.